﻿using System;
using System.Diagnostics;
using System.Linq;
using System.Security.Principal;
using System.Threading;
using System.Windows.Forms;

namespace NetworkInterfaceManager
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// Network Interface Manager 是一个 Windows Forms 应用程序，旨在管理和监控计算机上的网络接口状态。用户可以通过此应用程序查看所有网络接口的详细信息，包括操作状态、速度等，并能够重启选定的网络接口。
        /// </summary>
        [STAThread]
        static void Main()
        {
            // 检查是否以管理员身份运行
            if (!IsRunAsAdmin())
            {
                RestartWithAdminRights();
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }

        private static bool IsRunAsAdmin()
        {
            using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
            {
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                return principal.IsInRole(WindowsBuiltInRole.Administrator);
            }
        }

        private static void RestartWithAdminRights()
        {
            try
            {
                ProcessStartInfo proc = new ProcessStartInfo
                {
                    UseShellExecute = true,
                    WorkingDirectory = Environment.CurrentDirectory,
                    FileName = Application.ExecutablePath,
                    Verb = "runas"
                };
                Process.Start(proc);
            }
            catch (Exception ex)
            {
                // 用户拒绝了UAC提示，这里可以选择处理错误或者直接退出
                MessageBox.Show($"管理员权限被拒，程序无法继续运行。\n{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}